package com.sky.controller.user;

import com.sky.constant.JwtClaimsConstant;
import com.sky.dto.UserLoginDTO;
import com.sky.properties.JwtProperties;
import com.sky.result.Result;
import com.sky.service.UserService;
import com.sky.utils.JwtUtil;
import com.sky.vo.UserLoginVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("/user/user")
@Slf4j
@Api(tags = "小程序用户端-相关接口")
@CrossOrigin//解决跨域问题
public class UserController {
    @Autowired
    private UserService userService;//用户服务层
    @Autowired
    private JwtProperties jwtProperties;
    /**
     * 用户微信登入和注册接口
     * <p>
     * ### 基本信息
     *<p>
     * **Path：** /user/user/login
     *<p>
     * **Method：** POST
     *<p>
     * **接口描述：**
     *<p>
     * ### 请求参数
     *<p>
     * **Headers**
     *<p>
     * | 参数名称     | 参数值           | 是否必须 | 示例 | 备注 |
     * | :----------- | :--------------- | :------- | :--- | :--- |
     * | Content-Type | application/json | 是       |      |      |
     *<p>
     * **Body**
     *
     *<p>
     *
     * | 名称 | 类型   | 是否必须 | 默认值 | 备注       | 其他信息 |
     * | :--- | :----- | :------- | :----- | :--------- | :------- |
     * | code | string | 必须     |        | 微信授权码 |          |
       | string  | 非必须   |        |                |               |
     */
    @ApiOperation(value = "用户微信登入和注册接口")
//    @RequestMapping(method = RequestMethod.POST, value = "/login")
    @PostMapping("/login")
    public Result<UserLoginVO> loginOrRegister(@RequestBody UserLoginDTO userLoginDTO) {
        //记录日志
        log.info("用户微信登入和注册接口，入参：{}", userLoginDTO);
        //业务:用户登入或注册
        UserLoginVO userLoginVO=userService.loginAndRegister(userLoginDTO);
        //生成jwt令牌,封装到UserLoginVO中返回
        Map<String, Object> claims = new HashMap<>();//声明有效载荷的Map对象
        claims.put(JwtClaimsConstant.USER_ID, userLoginVO.getId());
        String jwt = JwtUtil.createJWT(jwtProperties.getUserSecretKey(), jwtProperties.getUserTtl(), claims);
        userLoginVO.setToken(jwt);
        //返回结果
        return Result.success(userLoginVO);

    }
}
